

// token   前端只要明白 获取 令牌  存储到本地  然后发送给后台 

// token 令牌   

//  生成 token  (加密的 字符串  有时效性   登录发送给前端 )

// Token是服务端生成的一串字符串，以作客户端进行请求的一个令牌，当第一次登录后，服务器生成一个Token便将此Token返回给客户端，以后客户端只需带上这个Token前来请求数据即可，无需再次带上用户名和密码

// https://www.cnblogs.com/lufeiludaima/p/pz20190203.html

// 使用Token的目的：Token的目的是为了减轻服务器的压力，减少频繁的查询数据库，使服务器更加健壮
const jwt = require("jsonwebtoken")

const secret = "wh2008-daydayup";

// Token 加密  
var createToken = function(data){
    return jwt.sign(data,secret,{expiresIn:'2h'});
}

exports.createToken = createToken

// 解密 token 
var decodeToken = function(token){
    return new Promise(function(resolve,reject){
        jwt.verify(token,secret,(err,data)=>{
            if(err){
                reject(err);
            }else{
                resolve(data)
                
            }
        })
    })
}


// 检查token 是否有效
// 1. token 不存在
// 2. token 过期
// 3. token 不正确 
// code ==3000 表示 token 有问题 登录异常 
exports.checkToken = function(req,res,callback){
    var token = req.headers.token;  // 请求头的token 
    if(token){
        decodeToken(token)
        .then(data=>{
            callback(data)
        })
        .catch(err=>{
            res.json({
                code:3000,
                msg:"token无效了,请登陆",
                type:0
            })
        })
    }else{
        res.json({
            code:3000,
            msg:"token不存在,请登陆",
            type:0
        })
    }
}
